import jess.Deftemplate;
import jess.Fact;
import jess.Funcall;
import jess.JessException;
import jess.RU;
import jess.Rete;
import jess.Value;
import java.util.Date;
public class CreateFacts {
	//public static int rasp;
	public static Rete engine;
	public static Deftemplate actiune, intrare,iesire,actiunibaie, actiunibucatarie,
	actiunicamera,servici,ceva;
	public static Fact f;
	public static int i;
	public CreateFacts() throws JessException
	{
		engine=new Rete();
		
		actiune=new Deftemplate("ora","descriere",engine);
		actiune.addMultiSlot("ora", Funcall.NIL, "STRING");
		actiune.addSlot("descriere", Funcall.NIL, "STRING");
		engine.addDeftemplate(actiune);
		
		intrare=new Deftemplate("val",engine);
		intrare.addSlot("ora", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(intrare);
		
		iesire=new Deftemplate("val",engine);
		iesire.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(iesire);
		
		actiunibaie=new Deftemplate("val",engine);
		actiunibaie.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(actiunibaie);
		
		actiunibucatarie=new Deftemplate("val",engine);
		actiunibucatarie.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(actiunibucatarie);
		
		actiunicamera=new Deftemplate("val",engine);
		actiunicamera.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(actiunicamera);
		
		servici=new Deftemplate("val",engine);
		servici.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(servici);
		
		ceva=new Deftemplate("val",engine);
		ceva.addSlot("val", Funcall.NIL, "INTEGER");
		engine.addDeftemplate(ceva);
		
		/*f=new Fact("intrebare",engine);
		f.setSlotValue("stringIntrebare", new Value(3,RU.INTEGER));
		f.setSlotValue("raspuns", new Value(3,RU.INTEGER));
		engine.assertFact(f);
		i=0;*/
	}
	public static void createFact() throws JessException {
	
		
	String alege_ora_trezire="(declare (salience 100))"+
		"?id <- (actiune (ora noaptea) (descriere toata lumea doarme))" +
		" =>" +
		" (retract ?id)"+
		"(bind ?*x* (myrandom 7))"+
		"(sethour ?*x*)"+
		"(bind ?*ora* (ia_ora))"+
		"(bind ?*min* (ia_min))"+
		"(bind ?*oratrezire* ?*ora*)"+
		"(bind ?*mintrezire* ?*min*)"+
		"(bind ?*camera* true)"+
		"(assert (actiune (ora ?*ora* ?*min*) (descriere se trezeste)))";
		
	String trezire="(actiune (ora ?*ora* ?*min*) (descriere se trezeste))"+
		"=>"+
		"(printout t se_trezeste_la_ora ?*ora* : ?*min* crlf)"+ //????????
		"(assert (actiune (ora ora) (descriere aprinde becul)))"+
		"(assert (actiune (ora ora) (descriere alege iesire)))";

	String culca="(actiune (ora ?*ora* ?*min*) (descriere ?desc))"+
		"(test (eq ?*ora* 22))"+
		" =>"+
		"(assert (actiune (ora noaptea) (descriere ora de culcare))))";

		String culcare= "(actiune (ora noaptea) (descriere ora de culcare))"+
	    "=>"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere se pune la culcare)))"+
	    "(printout t stinge tot la ora ?*ora*:?*min* crlf)"+
	    "(printout t se pune la culcare la ora ?*ora*:?*min* crlf)"+
	    "(exit)";

		String aprinde_bec="(declare (salience 90))"+
	    "?id<-(actiune (ora ora) (descriere aprinde becul))"+
	    "(test (eq ?*bec* false))"+
	    "=>"+
	    "(retract ?id)"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere aprinde becul)))"+
	    "(assert (iesire (val 1)))"+
	    "(printout t aprinde becul la ora ?*ora* :?*min* crlf)"+
	    "(bind ?*bec* true)"+
	    "(schimba_ora 1)"+
	    "(bind ?*ora* (ia_ora))"+
	    "(bind ?*min* (ia_min))";
	    
		String stinge_bec= "(declare (salience 90))"+
	      "?id<-(actiune (ora ora) (descriere stinge becul)) "+
	    "(test (eq ?*bec* true))"+
	    "=>"+
	    "(retract ?id)"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere stinge becul)))"+
	    "(bind ?*bec* false)"+
	    "(schimba_ora 1)"+
	    "(bind ?*ora* (ia_ora))"+
	    "(bind ?*min* (ia_min))";

		String intra=
	    "(declare (salience 80))"+
	    "?id<-(ceva (val 0))"+
	    "=>"+
	    "(retract ?id)"+
	    "(bind ?*x* (myrandom 3))"+
	    "(assert (intrare (val ?*x*)))"+
	    "(bind ?*bucatarie* false)"+
	    "(bind ?*camera* false)"+
	    "(bind ?*baie* false)"+
	    "(bind ?*succes* false)";

		String intra_bucatarie=
	    "(declare (salience 20))"+
	    "?id<-(intrare (val 0))"+
	    "=>"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere intra in bucatarie)))"+
	    "(retract ?id)"+
	    "(schimba_ora 1)"+
	    "(bind ?*ora* (ia_ora))"+
	    "(bind ?*min* (ia_min))"+
	    "(bind ?*bucatarie* true)"+
	    "(assert (actiune (ora ora) (descriere alege iesire)))"+
	    "(assert (actiune (ora ora) (descriere aprinde becul)))"+
	    "(printout t intra in bucatarie la ora ?*ora* :?*min* crlf)";

		String intra_baie=
	    "(declare (salience 20))"+
	    "?id<-(intrare (val 1))"+
	    "=>"+
	    "(retract ?id)"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere intra in baie)))"+
	    "(schimba_ora 1)"+
	    "(bind ?*ora* (ia_ora))"+
	    "(bind ?*min* (ia_min))"+
	    "(bind ?*baie* true)"+
	    "(assert (actiune (ora ora) (descriere alege iesire)))"+
	    "(assert (actiune (ora ora) (descriere aprinde becul)))"+
	    "(printout t intra in baie la ora ?*ora* :?*min* crlf)";

		String intra_camera=
	    "(declare (salience 20))"+
	    "?id<-(intrare (val 2))"+
	    "=>"+
	    "(retract ?id)"+
	    "(assert (actiune (ora ?*ora* ?*min*) (descriere intra in camera)))"+
	    "(schimba_ora 1)"+
	    "(bind ?*ora* (ia_ora))"+
	    "(bind ?*min* (ia_min))"+
	    "(bind ?*camera* true)"+
	    "(assert (actiune (ora ora) (descriere alege iesire)))"+
	    "(assert (actiune (ora ora) (descriere aprinde becul)))"+
	    "(printout t intra in camera la ora ?*ora* :?*min* crlf)";

		String alegeincamera=
	    "(declare (salience 100))"+
	    "?id<-(actiune (ora ora) (descriere alege iesire))"+
	    "=>"+
	    "(retract ?id)"+
	    "(bind ?*x* (myrandom 2))"+
	    "(assert (iesire (val ?*x*)))";

		String iese=
	    "?id<-(iesire (val 0))"+
	    	    "=>"+
	    	    "(retract ?id)"+
	    	    "(assert (actiune (ora ora) (descriere iese)))";
		

		String iese_bucatarie=
	    "?id<-(actiune (ora ora) (descriere iese))"+
	    	    "(test (eq ?*bucatarie* true))"+
	    	    "=>"+
	    	    "(retract ?id)"+
	    	    "(schimba_ora 1)"+
	    	    "(bind ?*ora* (ia_ora))"+
	    	    "(bind ?*min* (ia_min))"+
	    	    "(bind ?*bucatarie* false)"+
	    	    "(assert (actiune (ora ?*ora* ?*min*) (descriere iese din bucatarie)))"+
	    	    "(assert (actiune (ora ora) (descriere stinge becul)))"+    
	    	    "(assert (actiune (ora ora) (descriere alege ceva)))"+
	    	    "(printout t stinge becul la ora ?*ora* :?*min* crlf)"+
	    	    "(printout t iese din bucatarie la ora ?*ora* :?*min* crlf)";
		String iese_baie=
	    "?id<-(actiune (ora ora) (descriere iese))"+
	    	   " (test (eq ?*baie* true))"+
	    	   " =>"+
	    	    "(retract ?id)"+
	    	    "(schimba_ora 1)"+
	    	    "(bind ?*ora* (ia_ora))"+
	    	    "(bind ?*min* (ia_min))"+
	    	    "(bind ?*baie* false)"+
	    	    "(assert (actiune (ora ?*ora* ?*min*) (descriere iese din baie)))"+
	    	    "(assert (actiune (ora ora) (descriere alege ceva)))"+
	    	    "(assert (actiune (ora ora) (descriere stinge becul)))"+
	    	    "(printout t stinge becul la ora ?*ora* :?*min* crlf)"+
	    	    "(printout t iese din baie la ora ?*ora* :?*min* crlf)";
		String iese_camera=
			    "?id<-(actiune (ora ora) (descriere iese))"+
			    "(test (eq ?*camera* true))"+
			    "=>"+
			    "(retract ?id)"+
			    "(schimba_ora 1)"+
			    "(bind ?*ora* (ia_ora))"+
			    "(bind ?*min* (ia_min))"+
			    "(bind ?*camera* false)"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere iese din camera)))"+
			    "(assert (actiune (ora ora) (descriere alege ceva)))"+
			    "(assert (actiune (ora ora) (descriere stinge becul)))"+
			    "(printout t stinge becul la ora ?*ora* :?*min* crlf)"+
			    "(printout t iese din camera la ora ?*ora* :?*min* crlf)";
			    
			/*alege intre a intra intr-o incapere sau a iesi din casa*/
			String ceva=
			    "(declare (salience 80))"+
			    "?id<-(actiune (ora ora) (descriere alege ceva))"+
			    "=>"+
			    "(retract ?id)"+
			    "(bind ?*x* (myrandom 1))"+
			    "(assert (ceva (val ?*x*)))";
			    
			/*alege unde sa plece*/
			String pleaca=
			    "(declare (salience 80))"+
			    "?id<-(ceva (val 1))"+
			    "=>"+
			    "(retract ?id)"+
			    "(bind ?*x* (myrandom 3))"+
			    "(assert (servici (val ?*x*)))"+
			    "(bind ?*succes* false)";
			    
			String esuazaplecare=
			    "(declare (salience 10))"+
			    "(or ?id<-(servici (val 0))"+
			        "?id<-(servici (val 1)))"+
			    "(test (eq ?*succes* false))"+
			    "=>"+
			    "(retract ?id)"+
			    "(assert (actiune (ora ora) (descriere alege ceva)))"+
			    "(printout t fail leave crlf)";
			    
			/*merge la serciciu*/
			String merge_servici=
			    "(declare (salience 20))"+
			    "?id<-(servici (val 0))"+
			    "(test (eq ?*nservici* 0))"+
			    "(test (eq ?*nscoala* 0))"+
			    "=>"+
			    "(bind ?*succes* true)"+
			    "(retract ?id)"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere merge la servici)))"+
			    "(printout t merge la servici la ora ?*ora* :?*min* crlf)"+
			    "(bind ?*nservici* 1)"+
			    "(bind ?*nscoala* 1)"+
			    "(schimba_ora 540)"+
			    "(bind ?*ora* (ia_ora))"+
			    "(bind ?*min* (ia_min))"+    
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere vine de la servici)))"+
			    "(assert (ceva (val 0)))"+
			    "(printout t vine de la servici la ora ?*ora* :?*min* crlf)";
			    
			/*merge la scoala*/
			String merge_scoala=
			    "(declare (salience 20))"+
			    "?id<-(servici (val 1))"+
			    "(test (eq ?*nscoala* 0))"+
			    "(test (eq ?*nservici* 0))"+
			    "(test (eq ?*ora* 7))"+
			    "=>"+
			    "(bind ?*succes* true)"+
			    "(retract ?id)"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere merge la scoala)))"+
			    "(printout t merge la scoala la ora ?*ora*:?*min* crlf)"+
			    "(bind ?*nscoala* 1)"+
			    "(bind ?*nservici* 1)"+
			    "(schimba_ora 360)"+
			    "(bind ?*ora* (ia_ora))"+
			    "(bind ?*min* (ia_min))"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere vine de la scoala)))"+
			    "(assert (ceva (val 0)))"+
			    "(printout t vine de la scoala la ora ?*ora* :?*min* crlf)";
			    
			/*merge afara*/
			String merge_afara=
			    "(declare (salience 20))"+
			    "?id<-(servici (val 2))"+
			    "=>"+
			    "(bind ?*succes* true)"+
			    "(retract ?id)"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere merge afara)))"+
			    "(printout t merge afara la ora ?*ora*:?*min* crlf)"+
			    "(schimba_ora 30)"+
			    "(bind ?*ora* (ia_ora))"+
			    "(bind ?*min* (ia_min))"+
			    "(assert (actiune (ora ?*ora* ?*min*) (descriere vine de afara)))"+
			    "(assert (ceva (val 0)))"+
			    "(printout t vine de afara la ora ?*ora* :?*min* crlf)";
			    
			/*alege sa faca o actiune*/
			String alegeact=
			    "?id<-(iesire (val 1))"+
			    "=>"+
			    "(retract ?id)"+
			    "(assert (actiune (ora ora) (descriere actiune)))"+
			    "(bind ?*succes* false)";
			String esuazabaie=
				    "(declare (salience 10))"+
				    "(or ?id<-(actiune (ora ora) (descriere toaleta))"+
				        "?id<-(actiune (ora ora) (descriere dus))"+
				        "?id<-(actiune (ora ora) (descriere haine))"+
				        "?id<-(actiune (ora ora) (descriere curatenie))"+
				        "?id<-(actiune (ora ora) (descriere chiuveta))"+
				        
				    "(test (eq ?*succes* false))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (iesire (val 1)))";
				    
				/*alege ce actiune sa faca in baie*/
				String esuazabucatarie=
				    "(declare (salience 10))"+
				    "(or ?id<-(actiune (ora ora) (descriere vase))"+
				        "?id<-(actiune (ora ora) (descriere mananca))"+
				        "?id<-(actiune (ora ora) (descriere microunde))"+
				        "?id<-(actiune (ora ora) (descriere aragaz))"+
				        "?id<-(actiune (ora ora) (descriere filtru))"+
				        "?id<-(actiune (ora ora) (descriere paine))"+
				        "?id<-(actiune (ora ora) (descriere sandwich))"+
				        "?id<-(actiune (ora ora) (descriere mixer))"+
				        
				    "(test (eq ?*succes* false))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (iesire (val 1)))";
				    
				/*alege ce actiune sa faca in baie*/
				String esuazacamera=
				    "(declare (salience 10))"+
				    "(or ?id<-(actiune (ora ora) (descriere porneste dvd))"+
				        "?id<-(actiune (ora ora) (descriere opreste dvd))"+
				        "?id<-(actiune (ora ora) (descriere porneste tv))"+
				        "?id<-(actiune (ora ora) (descriere opreste tv))"+
				        "?id<-(actiune (ora ora) (descriere porneste calculator))"+
				        "?id<-(actiune (ora ora) (descriere opreste calculator))"+
				        "?id<-(actiune (ora ora) (descriere porneste aer conditionat))"+
				        "?id<-(actiune (ora ora) (descriere opreste aer conditionat))"+
				        "?id<-(actiune (ora ora) (descriere sta))"+
				        "?id<-(actiune (ora ora) (descriere sta la calculator))"+
				        "?id<-(actiune (ora ora) (descriere uita tv))"+
				        "?id<-(actiune (ora ora) (descriere aspirator))"+
				        
				    "(test (eq ?*succes* false))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (iesire (val 1)))";
				    
				String alege_actiune_baie= 
				    "(declare (salience 80))"+ 
				    "?id<-(actiune (ora ora) (descriere actiune))"+
				    "(test (eq ?*baie* true))"+
				    "=>"+    
				    "(retract ?id)"+
				    "(bind ?*x* (myrandom 5))"+
				    "(assert (actiunibaie (val ?*x*)))"+
				    "(bind ?*succes* false)";
				    
				/*alege ce actiune sa faca in bucatarie*/
				String alege_actiune_bucatarie=
				    "(declare (salience 80))"+ 
				    "?id<-(actiune (ora ora) (descriere actiune))"+
				    "(test (eq ?*bucatarie* true))"+
				    "=>"+   
				    "(retract ?id)"+
				    "(bind ?*x* (myrandom 8))"+
				    "(assert (actiunibucatarie (val ?*x*)))"+
				    "(bind ?*succes* false)";
				    
				/*alege ce actiune sa faca in camera*/
				String alege_actiune_camera=
				    "(declare (salience 80))"+ 
				    "?id<-(actiune (ora ora) (descriere actiune))"+
				    "(test (eq ?*camera* true))"+
				    "=>"+    
				    "(retract ?id)"+
				    "(bind ?*x* (myrandom 12))"+
				    "(assert (actiunicamera (val ?*x*)))"+
				    "(bind ?*succes* false)";
				    
				String alegetoaleta=
				    "?id<-(actiunibaie (val 0))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ora) (descriere toaleta)))";
				    
				String foloseste_toaleta=
				    "(declare (salience 20))"+
				    "?id<-(actiune (ora ora) (descriere toaleta))"+
				    "(test (neq ?*ntoaleta* 5))"+
				    "(test (neq ?*ultim* toaleta))"+
				    "=>"+
				    "(bind ?*succes* true)"+
				    "(bind ?*ultim* chiuveta)"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste toaleta)))"+
				    "(printout t foloseste toaleta la ora ?*ora* :?*min* crlf)"+
				    "(schimba_ora 5)"+
				    "(bind ?*ora* (ia_ora))"+
				    "(bind ?*min* (ia_min))"+ 
				    "(bind ?*ntoaleta* (+ 1 ?*ntoaleta*))"+
				    "(assert (actiune (ora ?*ora* ?*min*) (descriere se spala la chiuveta)))"+
				    "(printout t se spala la chiuveta la ora ?*ora* :?*min* crlf)"+
				    "(assert (actiune (ora ora) (descriere alege iesire)))";
				    
				String alegechiuveta=
				    "?id<-(actiunibaie (val 1))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ora) (descriere chiuveta)))";
				    
				String spala_chiuveta=
				    "(declare (salience 20))"+
				    "?id<-(actiune (ora ora) (descriere chiuveta))"+
				    "=>"+
				    "(bind ?*succes* true)"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ?*ora* ?*min*) (descriere se spala la chiuveta)))"+
				    "(printout t se spala la chiuveta la ora ?*ora*:?*min* crlf)"+
				    "(assert (actiune (ora ora) (descriere alege iesire)))"+
				    "(schimba_ora 5)"+
				    "(bind ?*ora* (ia_ora))"+
				    "(bind ?*min* (ia_min))";
				    
				String alegedus=
				    "?id<-(actiunibaie (val 2))"+
				    "=>"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ora) (descriere dus)))";
				    
				String spala_dus=
				    "(declare (salience 20))"+
				    "?id<-(actiune (ora ora) (descriere dus))"+
				    "(test (neq ?*ndus* 2))"+
				    "(test (neq ?*ultim* dus))"+
				    "=>"+
				    "(bind ?*succes* true)"+
				    "(bind ?*ultim* dus)"+
				    "(retract ?id)"+
				    "(assert (actiune (ora ?*ora* ?*min*) (descriere se spala la dus)))"+
				    "(printout t se spala la dus la ora ?*ora*:?*min* crlf)"+
				    "(assert (actiune (ora ora) (descriere alege iesire)))"+
				    "(schimba_ora 20)"+
				    "(bind ?*ora* (ia_ora))"+
				    "(bind ?*min* (ia_min))"+
				    "(bind ?*ndus* (+ 1 ?*ndus*))";
				String alegehaine=
					    "?id<-(actiunibaie (val 3))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere haine)))";
					    
				String spala_haine=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere haine))"+
					    "(test (neq ?*nhaine* 3))"+
					    "(test (neq ?*ultim* haine))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* haine)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere spala haine)))"+
					    "(printout t spala haine la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 5)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*orahaine* ?*ora*)"+
					    "(bind ?*nhaine* (+ 1 ?*nhaine*))";
					    
				String alegebaie=
					    "?id<-(actiunibaie (val 4))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere curatenie)))";
					    
				String curata_baie=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere curatenie))"+
					    "(test (eq ?*nbaie* 0))"+
					    "(test (neq ?*ultim* baie))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* baie)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere face curat in baie)))"+
					    "(printout t face curat in baie la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 30)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*nbaie* 1)";
					    
				String alegemicrounde=
					    "?id<-(actiunibucatarie (val 0))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere microunde)))";
					    
				String porneste_cuptor_microunde=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere microunde))"+
					    "(test (neq ?*ultim* microunde))"+
					    "=>"+
					    "(bind ?*ultim* microunde)"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste cuptorul cu microunde)))"+
					    "(printout t foloseste cuptorul cu microunde la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 2)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegearagaz=
					    "?id<-(actiunibucatarie (val 1))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere aragaz)))";
					    
					String porneste_aragaz=
					    "(declare (salience 20))"+
					     "?id<-(actiune (ora ora) (descriere aragaz))"+
					    "(test (neq ?*ultim* aragaz))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* aragaz)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste aragazul)))"+
					    "(printout t foloseste aragazul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 15)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegefiltru=
					    "?id<-(actiunibucatarie (val 2))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere filtru)))";
					    
					String porneste_filtru_cafea=
					    "(declare (salience 20))"+   
					     "?id<-(actiune (ora ora) (descriere filtru))"+
					    "(test (neq ?*ultim* filtru))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* filtru)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste filtrul de cafea)))"+
					    "(printout t foloseste filtrul de cafea la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 10)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegevase=
					    "?id<-(actiunibucatarie (val 3))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere vase)))";
					    
					String porneste_masina_spalat_vase=
					    "(declare (salience 20))"+
					    " ?id<-(actiune (ora ora) (descriere vase))"+
					    "(test (neq ?*nvase* ?*nmancare*))"+
					    "(test (neq ?*ultim* vase))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* vase)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere spala vasele)))"+
					    "(printout t spala vasele la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 15)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*nvase* (+ 1 ?*nvase*))";
					    
					String alegepaine=
					    "?id<-(actiunibucatarie (val 4))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere paine)))";
					    
					String porneste_prajitor_paine=
					    "(declare (salience 20))"+
					     "?id<-(actiune (ora ora) (descriere paine))"+
					    "(test (neq ?*ultim* paine))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* paine)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste prajitorul de paine)))"+
					    "(printout t foloseste prajitorul de paine la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 5)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegesandwich=
					    "?id<-(actiunibucatarie (val 5))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere sandwich)))";
					    
					String porneste_sandwichmaker=
					    "(declare (salience 20))"+
					     "?id<-(actiune (ora ora) (descriere sandwich))"+
					    "(test (neq ?*ultim* sandwich))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* sandwich)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste sandwich-makerul)))"+
					    "(printout t foloseste sandwich-makerul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 15)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegemixer=
					    "?id<-(actiunibucatarie (val 6))"+
					   " =>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere mixer)))";
					    
					String porneste_mixer_blender=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere mixer))"+
					    "(test (neq ?*ultim* mixer))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* mixer)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste mixerul/blenderul)))"+
					    "(printout t foloseste mixerul/blenderul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 10)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegedvdp=
					    "?id<-(actiunicamera (val 0))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere porneste dvd)))";
					    
					String porneste_dvdplayer=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere porneste dvd))"+
					    "(test (eq ?*dvdplayer* false))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere porneste dvd-playerul)))"+
					    "(printout t porneste dvd-playerul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(bind ?*dvdplayer* true)";
					    
					String alegedvdo=
					    "?id<-(actiunicamera (val 1))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere opreste dvd)))";
					    
					String opreste_dvdplayer=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere opreste dvd))"+
					    "(test (eq ?*dvdplayer* true))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere opreste dvd-playerul)))"+
					    "(printout t opreste dvd-playerul la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(bind ?*dvdplayer* false)";
					     
					String alegetvp=
					    "?id<-(actiunicamera (val 2))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere porneste tv)))";
					    
					String porneste_televizor=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere porneste tv))"+
					    "(test (eq ?*televizor* false))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere porneste televizorul)))"+
					    "(printout t porneste televizorul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*televizor* true)";
					    
					String alegetvo=
					    "?id<-(actiunicamera (val 3))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere opreste tv)))";
					    
					String opreste_televizor=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere opreste tv))"+
					    "(test (eq ?*televizor* true))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere opreste televizorul)))"+
					    "(printout t opreste televizorul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(bind ?*televizor* false)";
					    
					String alegecalculatorp=
					    "?id<-(actiunicamera (val 4))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere porneste calculator)))";
					    
					String porneste_calculator=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere porneste calculator))"+
					    "(test (eq ?*calculator* false))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere porneste calculatorul)))"+
					    "(printout t porneste calculatorul la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*calculator* true)";
					    
					String alegecalculatoro=
					    "?id<-(actiunicamera (val 5))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere opreste calculator)))";
					    
					String opreste_calculator=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere opreste calculator))"+
					    "(test (eq ?*calculator* true))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere opreste calculatorul)))"+
					    "(printout t opreste calculatorul la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(bind ?*calculator* false)";
					    
					String alegeaerp=
					    "?id<-(actiunicamera (val 6))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere porneste aer conditionat)))";
					    
					String porneste_aer_conditionat=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere porneste aer conditionat))"+
					    "(test (eq ?*aer_conditionat* false))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere porneste aer conditionat)))"+
					    "(printout t porneste aer conditionat la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*aer_conditionat* true)";
					    
					String alegeaero=
					    "?id<-(actiunicamera (val 7))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere opreste aer conditionat)))";
					    
					String opreste_aer_conditionat=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere opreste aer conditionat))"+
					    "(test (eq ?*aer_conditionat* true))"+
					    "=>"+
					    "(retract ?id)"+
					    "(schimba_ora 1)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere opreste aer conditionat)))"+
					    "(printout t opreste aer conditionat la ora ?*ora*:?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(bind ?*aer_conditionat* false)";
					    
					String alegeaspirator=
					    "?id<-(actiunicamera (val 8))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere aspirator)))";
					    
					String utilizeaza_aspirator=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere aspirator))"+
					    "(test (neq ?*ultim* aspirator))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* aspirator)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste aspiratorul)))"+
					    "(printout t foloseste aspiratorul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 30)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegetv=
					    "?id<-(actiunicamera (val 9))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere uita tv)))";
					    
					String uita_tv=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere uita tv))"+
					    "(test (eq ?*televizor* true))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere se uita la televizor)))"+
					    "(printout t se uita la televizor?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 50)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegecalculator=
					    "?id<-(actiunicamera (val 10))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere sta la calculator)))";
					    
					String utilizeaza_calculator=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere sta la calculator))"+
					    "(test (eq ?*calculator* true))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere foloseste calculatorul)))"+
					    "(printout t foloseste calculatorul la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 50)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegesta=
					    "?id<-(actiunicamera (val 11))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere sta)))";
					    
					String sta=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere sta))"+
					    "(test (neq ?*ultim* sta))"+
					   " =>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* sta)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere sta)))"+
					    "(printout t sta la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 10)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))";
					    
					String alegemananca=
					    "?id<-(actiunibucatarie (val 7))"+
					    "=>"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ora) (descriere mananca)))";
					    
					String mananca=
					    "(declare (salience 20))"+
					    "?id<-(actiune (ora ora) (descriere mananca))"+
					    "(test (neq ?*nmancare* 6))"+
					    "(test (neq ?*ultim* mananca))"+
					    "=>"+
					    "(bind ?*succes* true)"+
					    "(bind ?*ultim* mananca)"+
					    "(retract ?id)"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere se spala la chiuveta)))"+
					    "(printout t se spala la chiuveta la ora ?*ora* :?*min* crlf)"+
					    "(schimba_ora 5)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(assert (actiune (ora ?*ora* ?*min*) (descriere mananca)))"+
					    "(printout t mananca la ora ?*ora* :?*min* crlf)"+
					    "(assert (actiune (ora ora) (descriere alege iesire)))"+
					    "(schimba_ora 20)"+
					    "(bind ?*ora* (ia_ora))"+
					    "(bind ?*min* (ia_min))"+
					    "(bind ?*nmancare* (+ 1 ?*nmancare*))";	    
	/*	engine.executeCommand(rule);
		engine.executeCommand(rule2);
		engine.executeCommand(rule3);
		engine.executeCommand(rule4);
		engine.executeCommand(rule5);
		engine.executeCommand(rule6);
		engine.executeCommand(rule7);
		engine.executeCommand(rule8);
		engine.executeCommand(rule9);
		engine.executeCommand(rule10);
		engine.executeCommand(rule11);
		engine.executeCommand(rule12);
		engine.executeCommand(rule13);*/

		System.out.println("inainte");
		engine.executeCommand("(facts)");
		engine.run();
		engine.retract(f);
		i++;
		System.out.println(i);
		/*f=engine.findFactByID(i);
		engine.retract(f);*/
		for (int j=1; j<2*i-1; j++)
		{
			/*if (j%2==0)
			{*/
			f=engine.findFactByID(j);
			if (f!=null)
				engine.retract(f);
			//}
			
		}
		

		/*ia intrebarea*/
		Value intr=engine.fetch("INTREBARE");
		if (intr!=null)
		{
			String s=intr.stringValue(engine.getGlobalContext());
			s=s.replace('_', ' ');
			rasp=2;

			if (!s.startsWith("Animalul"))
				Interfata.setComponente(s, true);
			else
				Interfata.setComponente(s, false);
		}
		System.out.println("dupa");
		engine.executeCommand("(facts)");
	}
}